
const express = require('express');
const router = express.Router();
const pool = require('../config/bd');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');


const codeCache = new Map();
// 内存存储验证码（替代Redis）


//发送短信接口
router.post('/send-code', async (req, res) => {
  const { phone } = req.body;

  // 1. 校验手机号格式（正则参考网页5）
  if (!/^1[3-9]\d{9}$/.test(phone)) {
    return res.status(400).json({ error: '手机号格式错误' });
  }

  try {
    // 2. 生成6位随机验证码（网页3、网页5）
    const code = Math.random().toString().slice(2, 8);

    // 3. 存储到内存（有效期5分钟）
    codeCache.set(phone, {
      code,
      expiresAt: Date.now() + 300000 // 5分钟
    });

    // 4. 开发环境直接返回验证码（网页7的测试模式）
    // if (process.env.NODE_ENV === 'development') {
    //   return res.status(200).json({
    //     success: true,
    //     debugCode: code // 仅在测试环境返回验证码
    //   });
    // }

    // 生产环境模拟发送成功（不实际调用短信接口）
    res.status(200).json({
      success: true,
      message: '短信发送成功',
      data: {
        debugCode: code,
      }
    });
  } catch (err) {
    console.error('短信发送失败:', err);
    res.status(500).json({ error: '短信发送失败' });
  }
});

//短信登录
router.post('/login/sms', async (req, res) => {
  const { phone, code } = req.body;
  const nickname = '用户' + phone.slice(-4); // 优化默认昵称生成逻辑[5](@ref)

  try {
    // 1. 验证码校验（保持原有缓存逻辑）
    const cached = codeCache.get(phone);
    if (!cached || cached.expiresAt < Date.now()) {
      return res.status(401).json({ error: '验证码已过期' });
    }
    if (cached.code !== code) {
      return res.status(401).json({ error: '验证码错误' });
    }

    // 2. 用户查询/创建（UUID主键方案）
    let [users] = await pool.query(
      'SELECT * FROM user WHERE phone = ? LIMIT 1', // 改为phone字段查询[7](@ref)
      [phone]
    );

    if (users.length === 0) {
      const userId = uuidv4(); // 显式生成UUID[6](@ref)
      await pool.query(
        'INSERT INTO user (id, phone, nickname) VALUES (?, ?, ?)', // 显式插入UUID
        [userId, phone, nickname]
      );
      users = [{ id: userId, phone }];
    }

    // 3. 生成JWT（兼容UUID类型）
    const token = jwt.sign(
      { userId: users[0].id.toString() }, // 确保传字符串类型[7](@ref)
      process.env.JWT_SECRET,
      { expiresIn: '24h' }
    );

    // 4. 清理验证码缓存
    codeCache.delete(phone);

    res.json({
      success: true,
      message: '短信登录成功',
      data: {
        userId: users[0].id, // 返回UUID字符串
        familyID: users[0].family_id,
        phone: phone,
        token: token
      },
    });
  } catch (err) {
    console.error('短信登录失败:', err);
    res.status(500).json({ error: '短信登录失败' });
  }
});

module.exports = router;